package subject.tengxun.middle;

import java.util.HashMap;

/**
 * 功能：
 * 作者：yedou
 * 日期：2025/3/20 12:21
 */
public class SubarraySumEqualsK {
    public static void main(String[] args) {
        int[] nums = {1, 1, 1};
        int k = 2;
        // 创建一个哈希表来存储前缀和及其出现的次数
        HashMap<Integer, Integer> prefixSumCount = new HashMap<>();
        // 初始化前缀和为0的次数为1
        prefixSumCount.put(0, 1);
        int count = 0; // 用于记录满足条件的子数组个数
        int prefixSum = 0; // 当前的前缀和

        for (int num : nums) {
            prefixSum += num; // 计算当前的前缀和

            // 如果哈希表中存在 (prefixSum - k)，则说明存在子数组的和为k
            if (prefixSumCount.containsKey(prefixSum - k)) {
                count += prefixSumCount.get(prefixSum - k);
            }

            // 更新当前前缀和的出现次数
            prefixSumCount.put(prefixSum, prefixSumCount.getOrDefault(prefixSum, 0) + 1);
        }
    }
}